using UnityEngine; using System.Collections; namespace TMPro.Examples { public class TextConsoleSimulator : MonoBehaviour { private TMP_Text m_TextComponent; private bool hasTextChanged; void Awake() { m_TextComponent = gameObject.GetComponent<TMP_Text>(); } void Start() { StartCoroutine(RevealCharacters(m_TextComponent)); //StartCoroutine(RevealWords(m_TextComponent)); } void OnEnable() { // Subscribe to event fired when text object has been regenerated. TMPro_EventManager.TEXT_CHANGED_EVENT.Add(ON_TEXT_CHANGED); } void OnDisable() { TMPro_EventManager.TEXT_CHANGED_EVENT.Remove(ON_TEXT_CHANGED); } // Event received when the text object has changed. void ON_TEXT_CHANGED(Object obj) { hasTextChanged = true; } /// <summary> /// Method revealing the text one character at a time. /// </summary> /// <returns></returns> IEnumerator RevealCharacters(TMP_Text textComponent) { textComponent.ForceMeshUpdate(); TMP_TextInfo textInfo = textComponent.textInfo; int totalVisibleCharacters = textInfo.characterCount; // Get # of Visible Character in text object int visibleCount = 0; while (true) { if (hasTextChanged) { totalVisibleCharacters = textInfo.characterCount; // Update visible character count. hasTextChanged = false; } if (visibleCount > totalVisibleCharacters) { yield return new WaitForSeconds(1.0f); visibleCount = 0; } textComponent.maxVisibleCharacters = visibleCount; // How many characters should TextMeshPro display? visibleCount += 1; yield return null; } } /// <summary> /// Method revealing the text one word at a time. /// </summary> /// <returns></returns> IEnumerator RevealWords(TMP_Text textComponent) { textComponent.ForceMeshUpdate(); int totalWordCount = textComponent.textInfo.wordCount; int totalVisibleCharacters = textComponent.textInfo.characterCount; // Get # of Visible Character in text object int counter = 0; int currentWord = 0; int visibleCount = 0; while (true) { currentWord = counter % (totalWordCount + 1); // Get last character index for the current word. if (currentWord == 0) // Display no words. visibleCount = 0; else if (currentWord < totalWordCount) // Display all other words with the exception of the last one. visibleCount = textComponent.textInfo.wordInfo[currentWord - 1].lastCharacterIndex + 1; else if (currentWord == totalWordCount) // Display last word and all remaining characters. visibleCount = totalVisibleCharacters; textComponent.maxVisibleCharacters = visibleCount; // How many characters should TextMeshPro display? // Once the last character has been revealed, wait 1.0 second and start over. if (visibleCount >= totalVisibleCharacters) { yield return new WaitForSeconds(1.0f); } counter += 1; yield return new WaitForSeconds(0.1f); } } } }